package com.shm.leetcode;

/**
 * 670. 最大交换
 * 给定一个非负整数，你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
 *
 * 示例 1 :
 *
 * 输入: 2736
 * 输出: 7236
 * 解释: 交换数字2和数字7。
 * 示例 2 :
 *
 * 输入: 9973
 * 输出: 9973
 * 解释: 不需要交换。
 * 注意:
 *
 * 给定数字的范围是 [0, 108]
 * @author SHM
 */
public class MaximumSwap {
    public int maximumSwap(int num) {
        char[] chars = String.valueOf(num).toCharArray();
        //是否已交换
        boolean flag = false;
        for(int i =0;i<chars.length-1;i++){
            //最大值
            char c = chars[i];
            //最大值的索引
            int k = i;
            for(int j=i+1;j<chars.length;j++){
                //大于当前交换值，且是索引最大的最大值
                if(chars[j]>chars[i]&&chars[j]>=c){
                    c=chars[j];
                    k=j;
                    flag=true;
                }
            }
            //只交换一次
            if(flag){
                chars[k]=chars[i];
                chars[i]=c;
                break;
            }
        }
        return Integer.parseInt(String.valueOf(chars));
    }
}
